From 184cbda170073ef68a3cd87375746ddf9253b039 Mon Sep 17 00:00:00 2001 From: Yehuda Katz + Carl Lerche Date: Tue, 10 Jun 2014 14:29:36 -0700 Subject: [PATCH] Validate dependency version on parse, not usage --- src/cargo/core/manifest.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/cargo/core/manifest.rs b/src/cargo/core/manifest.rs index 6a57ca343..025e31bcc 100644 --- a/src/cargo/core/manifest.rs +++ b/src/cargo/core/manifest.rs @@ -197,7 +197,13 @@ pub struct Project { #[deriving(Encodable,PartialEq,Clone,Show)] pub enum TomlDependency { SimpleDep(String), - DetailedDep(HashMap) + DetailedDep(DetailedTomlDependency) +} + +#[deriving(Encodable,PartialEq,Clone,Show)] +pub struct DetailedTomlDependency { + version: String, + other: HashMap } #[deriving(Encodable,PartialEq,Clone)] @@ -243,7 +249,13 @@ impl TomlManifest { details.insert(k.clone(), v.clone()); } - deps.insert(k.clone(), DetailedDep(details)); + let version = try!(details.find_equiv(&"version") + .require(simple_human("dependencies must include a version"))).clone(); + + deps.insert(k.clone(), DetailedDep(DetailedTomlDependency { + version: version, + other: details + })); }, _ => () } @@ -275,9 +287,8 @@ impl TomlManifest { Some(ref dependencies) => { for (n, v) in dependencies.iter() { let version = match *v { - SimpleDep(ref string) => string, - DetailedDep(ref map) => try!(map.find_equiv(&"version") - .require(simple_human("dependencies must include a version"))) + SimpleDep(ref string) => string.clone(), + DetailedDep(ref details) => details.version.clone() }; deps.push(try!(Dependency::parse(n.as_slice(), version.as_slice()))) -- 2.30.2